#! /usr/bin/env python

# hmatrix-rs2

import sys

def pars(stringi):
    """ przetwarza lancuch w tablice, ktorej poszczegolnymi elementami sa jego frag. rozdzielone dwukropkiem """
    stringi+=':'
    res=[]
    s=''
    for x in stringi:
        if x != ':':
            s+=x
        else:
            res.append(s)
            s=''
    return res
     
def open_data(file):
    """ odczytuje informacje z	pliku, zwraca je w formie tablicy """
    tab=[]
    fname=open(file,'r')
    for y in fname.readlines():
       # print y.lstrip(), len(y)
        try:
            if y.lstrip()[0] != '#':
                if y[-1:] == '\n':
                    y=y[:-1]
                tab.append(pars(y))
#            print 'ok'
        except:
            pass
    fname.close()
    return tab 

def moddata(table):
    """ modyfikuje tablice w forme wymagana przez program """	
    for itm in table:
        if len(itm) == 7:
            repr='<'+itm[0]+'>'
            itm[0] = repr
            for x in range(1,7):
                try:
                    itm[x]=int(itm[x])
                except:
                    pass
    return table
    
def moddata2(tab):
    repr = '<'+tab[0]+'>'
    tab[0] = repr
    for x in range(1,7):
        try:
            tab[x] = int(tab[x])
        except:
            pass
    return tab   
    
# nazwa, pocz, koniec, pocz-strop, koniec-strop, pocz-spong, koniec-spong      

def mk_hmx(tab):
    """ tworzy pusta macierz harrisa """	
    hmx=[]
    for x in range(0,len(tab)):
        hmx.append(['<------>']*len(tab))
    return hmx
    
def svert(t,i):
    """ oblicza pozycje w poziomie warstwy i """	
    x=0
    v=0
    #print len(t)-1
    for x in range(0,len(t)):
        if t[i][1] == t[x][2] and t[i][3] == t[x][4]:
	    #print t[i], '\n',t[x]
	    #raw_input('sw')
            v=1+svert(t,x)
	    break
        else:
            x+=1
    return v 

def build_matrix(tab):
    """ buduje macierz harrisa na podstawie danych z pliku """	
    hmx=mk_hmx(tab)
    x=0
    while x < len(tab):
        vert=0 # vertical pos
        hori=0 # horizontal pos
        for p in range(0,len(tab)):
            if tab[x][1] < tab[p][2] and tab[x][2] > tab[p][1] and tab[x][3] > tab[p][3]:       
                hori+=1
            if tab[x][1] == tab[p][2] and tab[x][3]==tab[p][4]:
		#print tab[x],'\n',tab[p]    
                #raw_input('svert')
                vert=1+svert(tab,p)     
        #print tab[x][0],vert,hori
        #raw_input('ok')
        hmx[hori][vert]=tab[x][0]
        x+=1
    return hmx

def sandr(tab,indeks,_string,g):
    if tab[indeks] == _string:
        if g == '+' and indeks < len(tab)-1:
            tab[indeks] = sandr(tab,indeks+1,_string,'+')
        elif g == '-' and indeks > 0:
            tab[indeks] = sandr(tab,indeks-1,_string,'-')
    else:
        return tab[indeks]


def show(hmatrix):
    empt='<------>'
    leh=len(hmatrix)
    for i in hmatrix:    
	#for lay in range(0,len(i)):
	 #   if i[lay] == empt and lay == 0:
	  #      i[lay] = sandr(i,lay+1,empt,'+')
	   # elif i[lay] == empt and lay != 0:
	    #    i[lay] = sandr(i,lay-1,empt,'-')
	print i
	        	
		
 
def main():
    filein = sys.argv[1]
    errorc='nieznanej operacji'
    try:
        errorc = 'pobierania'    
        t = open_data(filein)
        print 'Pobieranie danych z pliku',filein
        t = moddata(t)
	errorc = 'tworzenia macierzy'
        mx=build_matrix(t)
        print "Zakonczono! Aby zobaczyc macierz, nacisnij klawisz ENTER",raw_input()
        print
        show(mx)
    except:
        print 'Blad w trakcie',errorc,'wybacz'
	pass
if __name__ == "__main__":
    main()
